// 表单校验规则由 schema2code 生成，不建议直接修改校验规则，而建议通过 schema2code 生成, 详情: https://uniapp.dcloud.net.cn/uniCloud/schema


const validator = {
  "user_id": {
    "rules": [
      {
        "required": true
      },
      {
        "format": "string"
      }
    ],
    "defaultValue": {
      "$env": "uid"
    }
  },
  "category_id": {
    "rules": [
      {
        "format": "string"
      }
    ],
    "title": "产品",
    "label": "产品"
  },
  "title": {
    "rules": [
      {
        "required": true
      },
      {
        "format": "string"
      }
    ],
    "label": "产品名称",
    "title": "产品名称"
  },
  "content": {
    "rules": [
      {
        "required": true
      },
      {
        "format": "string"
      }
    ],
    "label": "产品内容",
    "title": "产品内容"
  },
  "excerpt": {
    "rules": [
      {
        "format": "string"
      }
    ],
    "label": "摘要",
    "title": "产品摘录"
  },
  "channel": {
    "rules": [
      {
        "format": "string"
      }
    ],
    "label": "产品渠道",
    "title": "产品渠道"
  },
  "limit": {
    "rules": [
      {
        "format": "int"
      },
      {
        "range": [
          {
            "value": 1,
            "text": "1-12个月"
          },
          {
            "value": 2,
            "text": "一年"
          },
          {
            "value": 3,
            "text": "三年"
          },
          {
            "value": 4,
            "text": "五年"
          },
          {
            "value": 5,
            "text": "十年"
          },
          {
            "value": 6,
            "text": "二十年"
          }
        ]
      }
    ],
    "label": "产品期限",
    "title": "产品期限",
    "defaultValue": 1
  },
  "quota": {
    "rules": [
      {
        "format": "int"
      },
      {
        "range": [
          {
            "value": 1,
            "text": "1-3w"
          },
          {
            "value": 2,
            "text": "3-5w"
          },
          {
            "value": 3,
            "text": "5-10w"
          },
          {
            "value": 4,
            "text": "10-15w"
          },
          {
            "value": 5,
            "text": "15-20w"
          },
          {
            "value": 6,
            "text": "20-25w"
          }
        ]
      }
    ],
    "label": "额度",
    "title": "额度",
    "defaultValue": 1
  },
  "returnWay": {
    "rules": [
      {
        "format": "int"
      },
      {
        "range": [
          {
            "value": 1,
            "text": "先息后本"
          },
          {
            "value": 2,
            "text": "等额本金"
          },
          {
            "value": 3,
            "text": "等额本息"
          },
          {
            "value": 4,
            "text": "其他"
          }
        ]
      }
    ],
    "label": "还款方式",
    "title": "还款方式",
    "defaultValue": 1
  },
  "ageLimit": {
    "rules": [
      {
        "format": "string"
      }
    ],
    "label": "年龄区间",
    "title": "年龄区间"
  },
  "taxLimit": {
    "rules": [
      {
        "format": "string"
      }
    ],
    "label": "税率区间",
    "title": "税率区间"
  },
  "register": {
    "rules": [
      {
        "format": "int"
      },
      {
        "range": [
          {
            "value": 1,
            "text": "大陆"
          },
          {
            "value": 2,
            "text": "港澳台"
          },
          {
            "value": 3,
            "text": "外籍"
          },
          {
            "value": 4,
            "text": "不限"
          }
        ]
      }
    ],
    "label": "户籍要求",
    "title": "户籍要求",
    "defaultValue": 1
  },
  "examine": {
    "rules": [
      {
        "format": "int"
      },
      {
        "range": [
          {
            "value": 1,
            "text": "当天"
          },
          {
            "value": 2,
            "text": "1-7天"
          },
          {
            "value": 3,
            "text": "7-15天"
          }
        ]
      }
    ],
    "label": "审批时间",
    "title": "审批时间",
    "defaultValue": 1
  },
  "apply": {
    "rules": [
      {
        "format": "int"
      },
      {
        "range": [
          {
            "value": 1,
            "text": "线上"
          },
          {
            "value": 2,
            "text": "线下"
          },
          {
            "value": 3,
            "text": "线上+线下"
          }
        ]
      }
    ],
    "label": "申请方式",
    "title": "申请方式",
    "defaultValue": 1
  },
  "security": {
    "rules": [
      {
        "format": "int"
      },
      {
        "range": [
          {
            "value": 1,
            "text": "无"
          },
          {
            "value": 2,
            "text": "珠三角一年"
          },
          {
            "value": 3,
            "text": "广东一年"
          }
        ]
      }
    ],
    "label": "社保要求",
    "title": "社保要求",
    "defaultValue": 1
  },
  "accumulation": {
    "rules": [
      {
        "format": "int"
      },
      {
        "range": [
          {
            "value": 1,
            "text": "无"
          },
          {
            "value": 2,
            "text": "珠三角一年"
          },
          {
            "value": 3,
            "text": "广东一年"
          },
          {
            "value": 4,
            "text": "本地一年"
          }
        ]
      }
    ],
    "label": "公积金",
    "title": "公积金",
    "defaultValue": 1
  },
  "insurance": {
    "rules": [
      {
        "format": "int"
      },
      {
        "range": [
          {
            "value": 1,
            "text": "无"
          },
          {
            "value": 2,
            "text": "两年三缴"
          }
        ]
      }
    ],
    "label": "保单",
    "title": "保单",
    "defaultValue": 1
  },
  "salary": {
    "rules": [
      {
        "format": "int"
      },
      {
        "range": [
          {
            "value": 1,
            "text": "无"
          },
          {
            "value": 2,
            "text": "珠三角一年"
          },
          {
            "value": 3,
            "text": "广东一年"
          },
          {
            "value": 4,
            "text": "本地一年"
          }
        ]
      }
    ],
    "label": "代发工资",
    "title": "代发工资",
    "defaultValue": 1
  },
  "house": {
    "rules": [
      {
        "format": "int"
      },
      {
        "range": [
          {
            "value": 1,
            "text": "无"
          },
          {
            "value": 2,
            "text": "月供6个月以上"
          },
          {
            "value": 3,
            "text": "月供12个月以上"
          }
        ]
      }
    ],
    "label": "按揭房",
    "title": "按揭房",
    "defaultValue": 1
  },
  "houseSelf": {
    "rules": [
      {
        "format": "int"
      },
      {
        "range": [
          {
            "value": 1,
            "text": "无"
          },
          {
            "value": 2,
            "text": "有"
          }
        ]
      }
    ],
    "label": "全款房",
    "title": "全款房",
    "defaultValue": 1
  },
  "car": {
    "rules": [
      {
        "format": "int"
      },
      {
        "range": [
          {
            "value": 1,
            "text": "无"
          },
          {
            "value": 2,
            "text": "全款"
          },
          {
            "value": 2,
            "text": "按揭"
          }
        ]
      }
    ],
    "label": "车辆",
    "title": "车辆",
    "defaultValue": 1
  },
  "taxLevel": {
    "rules": [
      {
        "format": "int"
      },
      {
        "range": [
          {
            "value": 1,
            "text": "无"
          },
          {
            "value": 2,
            "text": "A"
          },
          {
            "value": 3,
            "text": "B"
          },
          {
            "value": 4,
            "text": "C"
          },
          {
            "value": 5,
            "text": "D"
          },
          {
            "value": 6,
            "text": "M"
          }
        ]
      }
    ],
    "label": "纳税等级",
    "title": "纳税等级",
    "defaultValue": 1
  },
  "taxInfo": {
    "rules": [
      {
        "format": "int"
      },
      {
        "range": [
          {
            "value": 1,
            "text": "无"
          },
          {
            "value": 2,
            "text": "年纳税5000以上"
          }
        ]
      }
    ],
    "label": "纳税情况",
    "title": "纳税情况",
    "defaultValue": 1
  },
  "taxAmount": {
    "rules": [
      {
        "format": "string"
      }
    ],
    "label": "纳税金额",
    "title": "纳税金额"
  },
  "invoice": {
    "rules": [
      {
        "format": "int"
      },
      {
        "range": [
          {
            "value": 1,
            "text": "无"
          },
          {
            "value": 2,
            "text": "年50万以上"
          },
          {
            "value": 3,
            "text": "年100万以上"
          }
        ]
      }
    ],
    "label": "开票情况",
    "title": "开票情况",
    "defaultValue": 1
  },
  "water": {
    "rules": [
      {
        "format": "string"
      }
    ],
    "label": "流水要求",
    "title": "流水要求"
  },
  "unionpay": {
    "rules": [
      {
        "format": "string"
      }
    ],
    "label": "银联收款",
    "title": "银联收款"
  },
  "credit": {
    "rules": [
      {
        "format": "int"
      },
      {
        "range": [
          {
            "value": 1,
            "text": "无"
          },
          {
            "value": 2,
            "text": "当前无逾期"
          },
          {
            "value": 3,
            "text": "半年无2次"
          },
          {
            "value": 4,
            "text": "一年无3次"
          },
          {
            "value": 5,
            "text": "两年无4次"
          }
        ]
      }
    ],
    "label": "征信要求",
    "title": "征信要求",
    "defaultValue": 1
  },
  "labels": {
    "rules": [
      {
        "format": "array"
      }
    ],
    "title": "标签",
    "label": "标签"
  },
  "article_status": {
    "rules": [
      {
        "format": "int"
      },
      {
        "range": [
          {
            "value": 0,
            "text": "草稿箱"
          },
          {
            "value": 1,
            "text": "已发布"
          }
        ]
      }
    ],
    "title": "产品状态",
    "defaultValue": 1,
    "label": "产品状态"
  },
  "remark": {
    "rules": [
      {
        "format": "string"
      }
    ],
    "title": "备注",
    "label": "备注"
  },
  "avatar": {
    "rules": [
      {
        "format": "file"
      }
    ],
    "label": "封面大图",
    "title": "封面大图"
  },
  "publish_date": {
    "rules": [
      {
        "format": "timestamp"
      }
    ],
    "title": "发表时间",
    "defaultValue": {
      "$env": "now"
    },
    "label": "发表时间"
  },
  "last_modify_date": {
    "rules": [
      {
        "format": "timestamp"
      }
    ],
    "title": "最后修改时间",
    "defaultValue": {
      "$env": "now"
    },
    "label": "最后修改时间"
  }
}

const enumConverter = {
  "limit_valuetotext": {
    "1": "1-12个月",
    "2": "一年",
    "3": "三年",
    "4": "五年",
    "5": "十年",
    "6": "二十年"
  },
  "quota_valuetotext": {
    "1": "1-3w",
    "2": "3-5w",
    "3": "5-10w",
    "4": "10-15w",
    "5": "15-20w",
    "6": "20-25w"
  },
  "returnWay_valuetotext": {
    "1": "先息后本",
    "2": "等额本金",
    "3": "等额本息",
    "4": "其他"
  },
  "register_valuetotext": {
    "1": "大陆",
    "2": "港澳台",
    "3": "外籍",
    "4": "不限"
  },
  "examine_valuetotext": {
    "1": "当天",
    "2": "1-7天",
    "3": "7-15天"
  },
  "apply_valuetotext": {
    "1": "线上",
    "2": "线下",
    "3": "线上+线下"
  },
  "security_valuetotext": {
    "1": "无",
    "2": "珠三角一年",
    "3": "广东一年"
  },
  "accumulation_valuetotext": {
    "1": "无",
    "2": "珠三角一年",
    "3": "广东一年",
    "4": "本地一年"
  },
  "insurance_valuetotext": {
    "1": "无",
    "2": "两年三缴"
  },
  "salary_valuetotext": {
    "1": "无",
    "2": "珠三角一年",
    "3": "广东一年",
    "4": "本地一年"
  },
  "house_valuetotext": {
    "1": "无",
    "2": "月供6个月以上",
    "3": "月供12个月以上"
  },
  "houseSelf_valuetotext": {
    "1": "无",
    "2": "有"
  },
  "car_valuetotext": {
    "1": "无",
    "2": "按揭"
  },
  "taxLevel_valuetotext": {
    "1": "无",
    "2": "A",
    "3": "B",
    "4": "C",
    "5": "D",
    "6": "M"
  },
  "taxInfo_valuetotext": {
    "1": "无",
    "2": "年纳税5000以上"
  },
  "invoice_valuetotext": {
    "1": "无",
    "2": "年50万以上",
    "3": "年100万以上"
  },
  "credit_valuetotext": {
    "1": "无",
    "2": "当前无逾期",
    "3": "半年无2次",
    "4": "一年无3次",
    "5": "两年无4次"
  },
  "article_status_valuetotext": {
    "0": "草稿箱",
    "1": "已发布"
  }
}

function filterToWhere(filter, command) {
  let where = {}
  for (let field in filter) {
    let { type, value } = filter[field]
    switch (type) {
      case "search":
        if (typeof value === 'string' && value.length) {
          where[field] = new RegExp(value)
        }
        break;
      case "select":
        if (value.length) {
          let selectValue = []
          for (let s of value) {
            selectValue.push(command.eq(s))
          }
          where[field] = command.or(selectValue)
        }
        break;
      case "range":
        if (value.length) {
          let gt = value[0]
          let lt = value[1]
          where[field] = command.and([command.gte(gt), command.lte(lt)])
        }
        break;
      case "date":
        if (value.length) {
          let [s, e] = value
          let startDate = new Date(s)
          let endDate = new Date(e)
          where[field] = command.and([command.gte(startDate), command.lte(endDate)])
        }
        break;
      case "timestamp":
        if (value.length) {
          let [startDate, endDate] = value
          where[field] = command.and([command.gte(startDate), command.lte(endDate)])
        }
        break;
    }
  }
  return where
}

export { validator, enumConverter, filterToWhere }